{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c7c80067",
   "metadata": {},
   "source": [
    "## 使用xgboost工具包实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7fcc5c49",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from sklearn import metrics\n",
    "from sklearn.model_selection import train_test_split\n",
    "import xgboost as xgb\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.metrics import confusion_matrix\n",
    "import seaborn as sns\n",
    "from sklearn.metrics import confusion_matrix\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ad39f82",
   "metadata": {},
   "source": [
    "### 1. 数据集准备\n",
    "* 读取 csv文件(TODO:你自己的数据集)\n",
    "* 保存为 训练集(train_x train_y)、测试集(test_x test_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "42bef524",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 4401 entries, 0 to 4400\n",
      "Data columns (total 6 columns):\n",
      " #   Column             Non-Null Count  Dtype  \n",
      "---  ------             --------------  -----  \n",
      " 0   label              4401 non-null   int64  \n",
      " 1   length             4401 non-null   float64\n",
      " 2   height             4401 non-null   float64\n",
      " 3    roughness_values  4401 non-null   float64\n",
      " 4   adhesion           4401 non-null   float64\n",
      " 5   Youngs_modulus     4401 non-null   float64\n",
      "dtypes: float64(5), int64(1)\n",
      "memory usage: 206.4 KB\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "df = pd.read_csv(\"./celldata_fine_tuning.csv\")\n",
    "\n",
    "data=df.iloc[:,1:]\n",
    "\n",
    "target=df.iloc[:,:-5]\n",
    "\n",
    "# ss = MinMaxScaler()\n",
    "\n",
    "# target = ss.fit_transform(target)\n",
    "\n",
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "96ea469e",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_x, test_x, train_y, test_y = train_test_split(data,target,test_size=0.1,random_state=7,shuffle = True)\n",
    "\n",
    "test_y = test_y - 1 #标签为[0,class_num)\n",
    "train_y = train_y - 1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0883a226",
   "metadata": {},
   "source": [
    "### 2. xgboost模型配置 \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e2765f39",
   "metadata": {},
   "outputs": [],
   "source": [
    "# xgboost模型初始化设置\n",
    "dtrain=xgb.DMatrix(train_x,label=train_y)\n",
    "\n",
    "dtest=xgb.DMatrix(test_x)\n",
    "watchlist = [(dtrain,'train')]\n",
    "\n",
    "# booster: 包括常规参数、模型参数、学习任务参数 TODO:you just need to change flowing parameters\n",
    "params={\n",
    "        # 常规参数\n",
    "        'booster':'gbtree',             #以决策树为基分类器\n",
    "        'nthread':8, #使用8个cpu进行计算\n",
    "        'eta': 0.025, \n",
    "        'seed':0,\n",
    "        \n",
    "        #模型参数\n",
    "        'max_depth':100,                  # 树的深度\n",
    "        'subsample':0.45,               #每棵树随机进行数据采样比例\n",
    "        'colsample_bytree':0.75,        #用来控制每棵随机采样的列数的占比(每一列是一个特征)。 典型值：0.5-1\n",
    "        'min_child_weight':1,           # 最小叶子节点样本权重和\n",
    "\n",
    "        # 学习任务参数\n",
    "        'gamma':0.15,                   # 惩罚项系数\n",
    "        'lambda':1,                    # L2正则化系数\n",
    "        'objective': 'multi:softmax', #定义损失函数 二元分类问题('multi:softmax' #多元分类)\n",
    "        'eval_metric': 'mlogloss',           # 评价指标\n",
    "        'learning_rate' : 0.1,          #学习率\n",
    "        'num_class': 22                 #设置分类类别\n",
    "       }\n",
    "num_boost_round = 500 #构建树的数目"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "507340c0",
   "metadata": {},
   "source": [
    "### 3. 训练与结果展示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6e7c1411",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-mlogloss:2.68173\n",
      "[1]\ttrain-mlogloss:2.39531\n",
      "[2]\ttrain-mlogloss:2.16835\n",
      "[3]\ttrain-mlogloss:1.98556\n",
      "[4]\ttrain-mlogloss:1.82535\n",
      "[5]\ttrain-mlogloss:1.68712\n",
      "[6]\ttrain-mlogloss:1.56731\n",
      "[7]\ttrain-mlogloss:1.46017\n",
      "[8]\ttrain-mlogloss:1.35791\n",
      "[9]\ttrain-mlogloss:1.27154\n",
      "[10]\ttrain-mlogloss:1.19020\n",
      "[11]\ttrain-mlogloss:1.11736\n",
      "[12]\ttrain-mlogloss:1.05251\n",
      "[13]\ttrain-mlogloss:0.99403\n",
      "[14]\ttrain-mlogloss:0.93712\n",
      "[15]\ttrain-mlogloss:0.88571\n",
      "[16]\ttrain-mlogloss:0.83997\n",
      "[17]\ttrain-mlogloss:0.79573\n",
      "[18]\ttrain-mlogloss:0.75422\n",
      "[19]\ttrain-mlogloss:0.71645\n",
      "[20]\ttrain-mlogloss:0.68000\n",
      "[21]\ttrain-mlogloss:0.64633\n",
      "[22]\ttrain-mlogloss:0.61650\n",
      "[23]\ttrain-mlogloss:0.58767\n",
      "[24]\ttrain-mlogloss:0.56129\n",
      "[25]\ttrain-mlogloss:0.53650\n",
      "[26]\ttrain-mlogloss:0.51402\n",
      "[27]\ttrain-mlogloss:0.49080\n",
      "[28]\ttrain-mlogloss:0.46922\n",
      "[29]\ttrain-mlogloss:0.44982\n",
      "[30]\ttrain-mlogloss:0.43073\n",
      "[31]\ttrain-mlogloss:0.41332\n",
      "[32]\ttrain-mlogloss:0.39702\n",
      "[33]\ttrain-mlogloss:0.38182\n",
      "[34]\ttrain-mlogloss:0.36754\n",
      "[35]\ttrain-mlogloss:0.35411\n",
      "[36]\ttrain-mlogloss:0.34157\n",
      "[37]\ttrain-mlogloss:0.32948\n",
      "[38]\ttrain-mlogloss:0.31691\n",
      "[39]\ttrain-mlogloss:0.30601\n",
      "[40]\ttrain-mlogloss:0.29600\n",
      "[41]\ttrain-mlogloss:0.28675\n",
      "[42]\ttrain-mlogloss:0.27789\n",
      "[43]\ttrain-mlogloss:0.26905\n",
      "[44]\ttrain-mlogloss:0.26030\n",
      "[45]\ttrain-mlogloss:0.25237\n",
      "[46]\ttrain-mlogloss:0.24454\n",
      "[47]\ttrain-mlogloss:0.23723\n",
      "[48]\ttrain-mlogloss:0.23065\n",
      "[49]\ttrain-mlogloss:0.22419\n",
      "[50]\ttrain-mlogloss:0.21796\n",
      "[51]\ttrain-mlogloss:0.21198\n",
      "[52]\ttrain-mlogloss:0.20655\n",
      "[53]\ttrain-mlogloss:0.20101\n",
      "[54]\ttrain-mlogloss:0.19570\n",
      "[55]\ttrain-mlogloss:0.19089\n",
      "[56]\ttrain-mlogloss:0.18623\n",
      "[57]\ttrain-mlogloss:0.18152\n",
      "[58]\ttrain-mlogloss:0.17691\n",
      "[59]\ttrain-mlogloss:0.17249\n",
      "[60]\ttrain-mlogloss:0.16857\n",
      "[61]\ttrain-mlogloss:0.16492\n",
      "[62]\ttrain-mlogloss:0.16128\n",
      "[63]\ttrain-mlogloss:0.15784\n",
      "[64]\ttrain-mlogloss:0.15441\n",
      "[65]\ttrain-mlogloss:0.15091\n",
      "[66]\ttrain-mlogloss:0.14786\n",
      "[67]\ttrain-mlogloss:0.14487\n",
      "[68]\ttrain-mlogloss:0.14220\n",
      "[69]\ttrain-mlogloss:0.13977\n",
      "[70]\ttrain-mlogloss:0.13720\n",
      "[71]\ttrain-mlogloss:0.13460\n",
      "[72]\ttrain-mlogloss:0.13220\n",
      "[73]\ttrain-mlogloss:0.13000\n",
      "[74]\ttrain-mlogloss:0.12780\n",
      "[75]\ttrain-mlogloss:0.12553\n",
      "[76]\ttrain-mlogloss:0.12350\n",
      "[77]\ttrain-mlogloss:0.12146\n",
      "[78]\ttrain-mlogloss:0.11944\n",
      "[79]\ttrain-mlogloss:0.11760\n",
      "[80]\ttrain-mlogloss:0.11561\n",
      "[81]\ttrain-mlogloss:0.11378\n",
      "[82]\ttrain-mlogloss:0.11208\n",
      "[83]\ttrain-mlogloss:0.11048\n",
      "[84]\ttrain-mlogloss:0.10864\n",
      "[85]\ttrain-mlogloss:0.10711\n",
      "[86]\ttrain-mlogloss:0.10552\n",
      "[87]\ttrain-mlogloss:0.10388\n",
      "[88]\ttrain-mlogloss:0.10233\n",
      "[89]\ttrain-mlogloss:0.10096\n",
      "[90]\ttrain-mlogloss:0.09960\n",
      "[91]\ttrain-mlogloss:0.09830\n",
      "[92]\ttrain-mlogloss:0.09712\n",
      "[93]\ttrain-mlogloss:0.09584\n",
      "[94]\ttrain-mlogloss:0.09465\n",
      "[95]\ttrain-mlogloss:0.09346\n",
      "[96]\ttrain-mlogloss:0.09236\n",
      "[97]\ttrain-mlogloss:0.09121\n",
      "[98]\ttrain-mlogloss:0.09012\n",
      "[99]\ttrain-mlogloss:0.08902\n",
      "[100]\ttrain-mlogloss:0.08800\n",
      "[101]\ttrain-mlogloss:0.08691\n",
      "[102]\ttrain-mlogloss:0.08589\n",
      "[103]\ttrain-mlogloss:0.08501\n",
      "[104]\ttrain-mlogloss:0.08412\n",
      "[105]\ttrain-mlogloss:0.08320\n",
      "[106]\ttrain-mlogloss:0.08224\n",
      "[107]\ttrain-mlogloss:0.08157\n",
      "[108]\ttrain-mlogloss:0.08073\n",
      "[109]\ttrain-mlogloss:0.07988\n",
      "[110]\ttrain-mlogloss:0.07915\n",
      "[111]\ttrain-mlogloss:0.07841\n",
      "[112]\ttrain-mlogloss:0.07762\n",
      "[113]\ttrain-mlogloss:0.07691\n",
      "[114]\ttrain-mlogloss:0.07614\n",
      "[115]\ttrain-mlogloss:0.07548\n",
      "[116]\ttrain-mlogloss:0.07480\n",
      "[117]\ttrain-mlogloss:0.07413\n",
      "[118]\ttrain-mlogloss:0.07347\n",
      "[119]\ttrain-mlogloss:0.07287\n",
      "[120]\ttrain-mlogloss:0.07222\n",
      "[121]\ttrain-mlogloss:0.07164\n",
      "[122]\ttrain-mlogloss:0.07106\n",
      "[123]\ttrain-mlogloss:0.07044\n",
      "[124]\ttrain-mlogloss:0.06994\n",
      "[125]\ttrain-mlogloss:0.06934\n",
      "[126]\ttrain-mlogloss:0.06877\n",
      "[127]\ttrain-mlogloss:0.06826\n",
      "[128]\ttrain-mlogloss:0.06776\n",
      "[129]\ttrain-mlogloss:0.06725\n",
      "[130]\ttrain-mlogloss:0.06681\n",
      "[131]\ttrain-mlogloss:0.06637\n",
      "[132]\ttrain-mlogloss:0.06587\n",
      "[133]\ttrain-mlogloss:0.06540\n",
      "[134]\ttrain-mlogloss:0.06498\n",
      "[135]\ttrain-mlogloss:0.06456\n",
      "[136]\ttrain-mlogloss:0.06410\n",
      "[137]\ttrain-mlogloss:0.06373\n",
      "[138]\ttrain-mlogloss:0.06331\n",
      "[139]\ttrain-mlogloss:0.06293\n",
      "[140]\ttrain-mlogloss:0.06255\n",
      "[141]\ttrain-mlogloss:0.06208\n",
      "[142]\ttrain-mlogloss:0.06172\n",
      "[143]\ttrain-mlogloss:0.06140\n",
      "[144]\ttrain-mlogloss:0.06106\n",
      "[145]\ttrain-mlogloss:0.06070\n",
      "[146]\ttrain-mlogloss:0.06038\n",
      "[147]\ttrain-mlogloss:0.06010\n",
      "[148]\ttrain-mlogloss:0.05975\n",
      "[149]\ttrain-mlogloss:0.05940\n",
      "[150]\ttrain-mlogloss:0.05907\n",
      "[151]\ttrain-mlogloss:0.05876\n",
      "[152]\ttrain-mlogloss:0.05845\n",
      "[153]\ttrain-mlogloss:0.05817\n",
      "[154]\ttrain-mlogloss:0.05787\n",
      "[155]\ttrain-mlogloss:0.05764\n",
      "[156]\ttrain-mlogloss:0.05739\n",
      "[157]\ttrain-mlogloss:0.05706\n",
      "[158]\ttrain-mlogloss:0.05674\n",
      "[159]\ttrain-mlogloss:0.05642\n",
      "[160]\ttrain-mlogloss:0.05617\n",
      "[161]\ttrain-mlogloss:0.05587\n",
      "[162]\ttrain-mlogloss:0.05561\n",
      "[163]\ttrain-mlogloss:0.05537\n",
      "[164]\ttrain-mlogloss:0.05510\n",
      "[165]\ttrain-mlogloss:0.05484\n",
      "[166]\ttrain-mlogloss:0.05462\n",
      "[167]\ttrain-mlogloss:0.05437\n",
      "[168]\ttrain-mlogloss:0.05412\n",
      "[169]\ttrain-mlogloss:0.05381\n",
      "[170]\ttrain-mlogloss:0.05359\n",
      "[171]\ttrain-mlogloss:0.05338\n",
      "[172]\ttrain-mlogloss:0.05317\n",
      "[173]\ttrain-mlogloss:0.05296\n",
      "[174]\ttrain-mlogloss:0.05270\n",
      "[175]\ttrain-mlogloss:0.05254\n",
      "[176]\ttrain-mlogloss:0.05235\n",
      "[177]\ttrain-mlogloss:0.05218\n",
      "[178]\ttrain-mlogloss:0.05195\n",
      "[179]\ttrain-mlogloss:0.05173\n",
      "[180]\ttrain-mlogloss:0.05149\n",
      "[181]\ttrain-mlogloss:0.05132\n",
      "[182]\ttrain-mlogloss:0.05114\n",
      "[183]\ttrain-mlogloss:0.05098\n",
      "[184]\ttrain-mlogloss:0.05071\n",
      "[185]\ttrain-mlogloss:0.05052\n",
      "[186]\ttrain-mlogloss:0.05037\n",
      "[187]\ttrain-mlogloss:0.05018\n",
      "[188]\ttrain-mlogloss:0.04998\n",
      "[189]\ttrain-mlogloss:0.04979\n",
      "[190]\ttrain-mlogloss:0.04958\n",
      "[191]\ttrain-mlogloss:0.04940\n",
      "[192]\ttrain-mlogloss:0.04924\n",
      "[193]\ttrain-mlogloss:0.04910\n",
      "[194]\ttrain-mlogloss:0.04890\n",
      "[195]\ttrain-mlogloss:0.04873\n",
      "[196]\ttrain-mlogloss:0.04857\n",
      "[197]\ttrain-mlogloss:0.04838\n",
      "[198]\ttrain-mlogloss:0.04826\n",
      "[199]\ttrain-mlogloss:0.04813\n",
      "[200]\ttrain-mlogloss:0.04797\n",
      "[201]\ttrain-mlogloss:0.04778\n",
      "[202]\ttrain-mlogloss:0.04767\n",
      "[203]\ttrain-mlogloss:0.04754\n",
      "[204]\ttrain-mlogloss:0.04742\n",
      "[205]\ttrain-mlogloss:0.04730\n",
      "[206]\ttrain-mlogloss:0.04716\n",
      "[207]\ttrain-mlogloss:0.04706\n",
      "[208]\ttrain-mlogloss:0.04692\n",
      "[209]\ttrain-mlogloss:0.04679\n",
      "[210]\ttrain-mlogloss:0.04665\n",
      "[211]\ttrain-mlogloss:0.04651\n",
      "[212]\ttrain-mlogloss:0.04636\n",
      "[213]\ttrain-mlogloss:0.04626\n",
      "[214]\ttrain-mlogloss:0.04617\n",
      "[215]\ttrain-mlogloss:0.04605\n",
      "[216]\ttrain-mlogloss:0.04588\n",
      "[217]\ttrain-mlogloss:0.04578\n",
      "[218]\ttrain-mlogloss:0.04568\n",
      "[219]\ttrain-mlogloss:0.04560\n",
      "[220]\ttrain-mlogloss:0.04550\n",
      "[221]\ttrain-mlogloss:0.04541\n",
      "[222]\ttrain-mlogloss:0.04530\n",
      "[223]\ttrain-mlogloss:0.04517\n",
      "[224]\ttrain-mlogloss:0.04502\n",
      "[225]\ttrain-mlogloss:0.04492\n",
      "[226]\ttrain-mlogloss:0.04481\n",
      "[227]\ttrain-mlogloss:0.04473\n",
      "[228]\ttrain-mlogloss:0.04463\n",
      "[229]\ttrain-mlogloss:0.04454\n",
      "[230]\ttrain-mlogloss:0.04441\n",
      "[231]\ttrain-mlogloss:0.04434\n",
      "[232]\ttrain-mlogloss:0.04420\n",
      "[233]\ttrain-mlogloss:0.04408\n",
      "[234]\ttrain-mlogloss:0.04400\n",
      "[235]\ttrain-mlogloss:0.04391\n",
      "[236]\ttrain-mlogloss:0.04379\n",
      "[237]\ttrain-mlogloss:0.04367\n",
      "[238]\ttrain-mlogloss:0.04353\n",
      "[239]\ttrain-mlogloss:0.04346\n",
      "[240]\ttrain-mlogloss:0.04337\n",
      "[241]\ttrain-mlogloss:0.04326\n",
      "[242]\ttrain-mlogloss:0.04316\n",
      "[243]\ttrain-mlogloss:0.04304\n",
      "[244]\ttrain-mlogloss:0.04300\n",
      "[245]\ttrain-mlogloss:0.04291\n",
      "[246]\ttrain-mlogloss:0.04286\n",
      "[247]\ttrain-mlogloss:0.04275\n",
      "[248]\ttrain-mlogloss:0.04267\n",
      "[249]\ttrain-mlogloss:0.04259\n",
      "[250]\ttrain-mlogloss:0.04248\n",
      "[251]\ttrain-mlogloss:0.04239\n",
      "[252]\ttrain-mlogloss:0.04233\n",
      "[253]\ttrain-mlogloss:0.04223\n",
      "[254]\ttrain-mlogloss:0.04214\n",
      "[255]\ttrain-mlogloss:0.04206\n",
      "[256]\ttrain-mlogloss:0.04196\n",
      "[257]\ttrain-mlogloss:0.04190\n",
      "[258]\ttrain-mlogloss:0.04180\n",
      "[259]\ttrain-mlogloss:0.04172\n",
      "[260]\ttrain-mlogloss:0.04163\n",
      "[261]\ttrain-mlogloss:0.04155\n",
      "[262]\ttrain-mlogloss:0.04149\n",
      "[263]\ttrain-mlogloss:0.04142\n",
      "[264]\ttrain-mlogloss:0.04136\n",
      "[265]\ttrain-mlogloss:0.04130\n",
      "[266]\ttrain-mlogloss:0.04123\n",
      "[267]\ttrain-mlogloss:0.04116\n",
      "[268]\ttrain-mlogloss:0.04107\n",
      "[269]\ttrain-mlogloss:0.04101\n",
      "[270]\ttrain-mlogloss:0.04092\n",
      "[271]\ttrain-mlogloss:0.04087\n",
      "[272]\ttrain-mlogloss:0.04080\n",
      "[273]\ttrain-mlogloss:0.04076\n",
      "[274]\ttrain-mlogloss:0.04069\n",
      "[275]\ttrain-mlogloss:0.04062\n",
      "[276]\ttrain-mlogloss:0.04060\n",
      "[277]\ttrain-mlogloss:0.04052\n",
      "[278]\ttrain-mlogloss:0.04049\n",
      "[279]\ttrain-mlogloss:0.04043\n",
      "[280]\ttrain-mlogloss:0.04037\n",
      "[281]\ttrain-mlogloss:0.04033\n",
      "[282]\ttrain-mlogloss:0.04027\n",
      "[283]\ttrain-mlogloss:0.04020\n",
      "[284]\ttrain-mlogloss:0.04016\n",
      "[285]\ttrain-mlogloss:0.04014\n",
      "[286]\ttrain-mlogloss:0.04007\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[287]\ttrain-mlogloss:0.04002\n",
      "[288]\ttrain-mlogloss:0.03996\n",
      "[289]\ttrain-mlogloss:0.03990\n",
      "[290]\ttrain-mlogloss:0.03988\n",
      "[291]\ttrain-mlogloss:0.03982\n",
      "[292]\ttrain-mlogloss:0.03976\n",
      "[293]\ttrain-mlogloss:0.03971\n",
      "[294]\ttrain-mlogloss:0.03967\n",
      "[295]\ttrain-mlogloss:0.03959\n",
      "[296]\ttrain-mlogloss:0.03952\n",
      "[297]\ttrain-mlogloss:0.03948\n",
      "[298]\ttrain-mlogloss:0.03941\n",
      "[299]\ttrain-mlogloss:0.03935\n",
      "[300]\ttrain-mlogloss:0.03928\n",
      "[301]\ttrain-mlogloss:0.03922\n",
      "[302]\ttrain-mlogloss:0.03913\n",
      "[303]\ttrain-mlogloss:0.03908\n",
      "[304]\ttrain-mlogloss:0.03901\n",
      "[305]\ttrain-mlogloss:0.03894\n",
      "[306]\ttrain-mlogloss:0.03889\n",
      "[307]\ttrain-mlogloss:0.03884\n",
      "[308]\ttrain-mlogloss:0.03878\n",
      "[309]\ttrain-mlogloss:0.03872\n",
      "[310]\ttrain-mlogloss:0.03869\n",
      "[311]\ttrain-mlogloss:0.03864\n",
      "[312]\ttrain-mlogloss:0.03858\n",
      "[313]\ttrain-mlogloss:0.03853\n",
      "[314]\ttrain-mlogloss:0.03848\n",
      "[315]\ttrain-mlogloss:0.03845\n",
      "[316]\ttrain-mlogloss:0.03840\n",
      "[317]\ttrain-mlogloss:0.03834\n",
      "[318]\ttrain-mlogloss:0.03829\n",
      "[319]\ttrain-mlogloss:0.03825\n",
      "[320]\ttrain-mlogloss:0.03821\n",
      "[321]\ttrain-mlogloss:0.03815\n",
      "[322]\ttrain-mlogloss:0.03812\n",
      "[323]\ttrain-mlogloss:0.03808\n",
      "[324]\ttrain-mlogloss:0.03802\n",
      "[325]\ttrain-mlogloss:0.03799\n",
      "[326]\ttrain-mlogloss:0.03793\n",
      "[327]\ttrain-mlogloss:0.03788\n",
      "[328]\ttrain-mlogloss:0.03783\n",
      "[329]\ttrain-mlogloss:0.03779\n",
      "[330]\ttrain-mlogloss:0.03774\n",
      "[331]\ttrain-mlogloss:0.03770\n",
      "[332]\ttrain-mlogloss:0.03763\n",
      "[333]\ttrain-mlogloss:0.03757\n",
      "[334]\ttrain-mlogloss:0.03753\n",
      "[335]\ttrain-mlogloss:0.03752\n",
      "[336]\ttrain-mlogloss:0.03750\n",
      "[337]\ttrain-mlogloss:0.03745\n",
      "[338]\ttrain-mlogloss:0.03743\n",
      "[339]\ttrain-mlogloss:0.03740\n",
      "[340]\ttrain-mlogloss:0.03734\n",
      "[341]\ttrain-mlogloss:0.03729\n",
      "[342]\ttrain-mlogloss:0.03727\n",
      "[343]\ttrain-mlogloss:0.03725\n",
      "[344]\ttrain-mlogloss:0.03721\n",
      "[345]\ttrain-mlogloss:0.03717\n",
      "[346]\ttrain-mlogloss:0.03715\n",
      "[347]\ttrain-mlogloss:0.03711\n",
      "[348]\ttrain-mlogloss:0.03708\n",
      "[349]\ttrain-mlogloss:0.03703\n",
      "[350]\ttrain-mlogloss:0.03700\n",
      "[351]\ttrain-mlogloss:0.03698\n",
      "[352]\ttrain-mlogloss:0.03692\n",
      "[353]\ttrain-mlogloss:0.03689\n",
      "[354]\ttrain-mlogloss:0.03685\n",
      "[355]\ttrain-mlogloss:0.03680\n",
      "[356]\ttrain-mlogloss:0.03676\n",
      "[357]\ttrain-mlogloss:0.03674\n",
      "[358]\ttrain-mlogloss:0.03667\n",
      "[359]\ttrain-mlogloss:0.03664\n",
      "[360]\ttrain-mlogloss:0.03660\n",
      "[361]\ttrain-mlogloss:0.03656\n",
      "[362]\ttrain-mlogloss:0.03654\n",
      "[363]\ttrain-mlogloss:0.03652\n",
      "[364]\ttrain-mlogloss:0.03650\n",
      "[365]\ttrain-mlogloss:0.03647\n",
      "[366]\ttrain-mlogloss:0.03644\n",
      "[367]\ttrain-mlogloss:0.03641\n",
      "[368]\ttrain-mlogloss:0.03638\n",
      "[369]\ttrain-mlogloss:0.03636\n",
      "[370]\ttrain-mlogloss:0.03633\n",
      "[371]\ttrain-mlogloss:0.03630\n",
      "[372]\ttrain-mlogloss:0.03626\n",
      "[373]\ttrain-mlogloss:0.03622\n",
      "[374]\ttrain-mlogloss:0.03620\n",
      "[375]\ttrain-mlogloss:0.03614\n",
      "[376]\ttrain-mlogloss:0.03612\n",
      "[377]\ttrain-mlogloss:0.03611\n",
      "[378]\ttrain-mlogloss:0.03609\n",
      "[379]\ttrain-mlogloss:0.03606\n",
      "[380]\ttrain-mlogloss:0.03602\n",
      "[381]\ttrain-mlogloss:0.03599\n",
      "[382]\ttrain-mlogloss:0.03597\n",
      "[383]\ttrain-mlogloss:0.03595\n",
      "[384]\ttrain-mlogloss:0.03593\n",
      "[385]\ttrain-mlogloss:0.03590\n",
      "[386]\ttrain-mlogloss:0.03586\n",
      "[387]\ttrain-mlogloss:0.03583\n",
      "[388]\ttrain-mlogloss:0.03578\n",
      "[389]\ttrain-mlogloss:0.03577\n",
      "[390]\ttrain-mlogloss:0.03573\n",
      "[391]\ttrain-mlogloss:0.03571\n",
      "[392]\ttrain-mlogloss:0.03567\n",
      "[393]\ttrain-mlogloss:0.03565\n",
      "[394]\ttrain-mlogloss:0.03560\n",
      "[395]\ttrain-mlogloss:0.03556\n",
      "[396]\ttrain-mlogloss:0.03554\n",
      "[397]\ttrain-mlogloss:0.03552\n",
      "[398]\ttrain-mlogloss:0.03546\n",
      "[399]\ttrain-mlogloss:0.03542\n",
      "[400]\ttrain-mlogloss:0.03540\n",
      "[401]\ttrain-mlogloss:0.03537\n",
      "[402]\ttrain-mlogloss:0.03536\n",
      "[403]\ttrain-mlogloss:0.03533\n",
      "[404]\ttrain-mlogloss:0.03531\n",
      "[405]\ttrain-mlogloss:0.03529\n",
      "[406]\ttrain-mlogloss:0.03527\n",
      "[407]\ttrain-mlogloss:0.03523\n",
      "[408]\ttrain-mlogloss:0.03522\n",
      "[409]\ttrain-mlogloss:0.03520\n",
      "[410]\ttrain-mlogloss:0.03517\n",
      "[411]\ttrain-mlogloss:0.03513\n",
      "[412]\ttrain-mlogloss:0.03511\n",
      "[413]\ttrain-mlogloss:0.03507\n",
      "[414]\ttrain-mlogloss:0.03505\n",
      "[415]\ttrain-mlogloss:0.03501\n",
      "[416]\ttrain-mlogloss:0.03500\n",
      "[417]\ttrain-mlogloss:0.03498\n",
      "[418]\ttrain-mlogloss:0.03495\n",
      "[419]\ttrain-mlogloss:0.03492\n",
      "[420]\ttrain-mlogloss:0.03489\n",
      "[421]\ttrain-mlogloss:0.03487\n",
      "[422]\ttrain-mlogloss:0.03485\n",
      "[423]\ttrain-mlogloss:0.03483\n",
      "[424]\ttrain-mlogloss:0.03482\n",
      "[425]\ttrain-mlogloss:0.03480\n",
      "[426]\ttrain-mlogloss:0.03476\n",
      "[427]\ttrain-mlogloss:0.03474\n",
      "[428]\ttrain-mlogloss:0.03472\n",
      "[429]\ttrain-mlogloss:0.03469\n",
      "[430]\ttrain-mlogloss:0.03466\n",
      "[431]\ttrain-mlogloss:0.03463\n",
      "[432]\ttrain-mlogloss:0.03462\n",
      "[433]\ttrain-mlogloss:0.03460\n",
      "[434]\ttrain-mlogloss:0.03457\n",
      "[435]\ttrain-mlogloss:0.03456\n",
      "[436]\ttrain-mlogloss:0.03454\n",
      "[437]\ttrain-mlogloss:0.03449\n",
      "[438]\ttrain-mlogloss:0.03448\n",
      "[439]\ttrain-mlogloss:0.03445\n",
      "[440]\ttrain-mlogloss:0.03442\n",
      "[441]\ttrain-mlogloss:0.03439\n",
      "[442]\ttrain-mlogloss:0.03436\n",
      "[443]\ttrain-mlogloss:0.03434\n",
      "[444]\ttrain-mlogloss:0.03430\n",
      "[445]\ttrain-mlogloss:0.03429\n",
      "[446]\ttrain-mlogloss:0.03426\n",
      "[447]\ttrain-mlogloss:0.03423\n",
      "[448]\ttrain-mlogloss:0.03421\n",
      "[449]\ttrain-mlogloss:0.03419\n",
      "[450]\ttrain-mlogloss:0.03417\n",
      "[451]\ttrain-mlogloss:0.03415\n",
      "[452]\ttrain-mlogloss:0.03412\n",
      "[453]\ttrain-mlogloss:0.03411\n",
      "[454]\ttrain-mlogloss:0.03409\n",
      "[455]\ttrain-mlogloss:0.03405\n",
      "[456]\ttrain-mlogloss:0.03404\n",
      "[457]\ttrain-mlogloss:0.03402\n",
      "[458]\ttrain-mlogloss:0.03401\n",
      "[459]\ttrain-mlogloss:0.03398\n",
      "[460]\ttrain-mlogloss:0.03396\n",
      "[461]\ttrain-mlogloss:0.03394\n",
      "[462]\ttrain-mlogloss:0.03392\n",
      "[463]\ttrain-mlogloss:0.03389\n",
      "[464]\ttrain-mlogloss:0.03385\n",
      "[465]\ttrain-mlogloss:0.03382\n",
      "[466]\ttrain-mlogloss:0.03378\n",
      "[467]\ttrain-mlogloss:0.03375\n",
      "[468]\ttrain-mlogloss:0.03372\n",
      "[469]\ttrain-mlogloss:0.03371\n",
      "[470]\ttrain-mlogloss:0.03370\n",
      "[471]\ttrain-mlogloss:0.03368\n",
      "[472]\ttrain-mlogloss:0.03366\n",
      "[473]\ttrain-mlogloss:0.03364\n",
      "[474]\ttrain-mlogloss:0.03363\n",
      "[475]\ttrain-mlogloss:0.03362\n",
      "[476]\ttrain-mlogloss:0.03362\n",
      "[477]\ttrain-mlogloss:0.03360\n",
      "[478]\ttrain-mlogloss:0.03359\n",
      "[479]\ttrain-mlogloss:0.03357\n",
      "[480]\ttrain-mlogloss:0.03356\n",
      "[481]\ttrain-mlogloss:0.03354\n",
      "[482]\ttrain-mlogloss:0.03353\n",
      "[483]\ttrain-mlogloss:0.03351\n",
      "[484]\ttrain-mlogloss:0.03348\n",
      "[485]\ttrain-mlogloss:0.03348\n",
      "[486]\ttrain-mlogloss:0.03345\n",
      "[487]\ttrain-mlogloss:0.03343\n",
      "[488]\ttrain-mlogloss:0.03341\n",
      "[489]\ttrain-mlogloss:0.03340\n",
      "[490]\ttrain-mlogloss:0.03340\n",
      "[491]\ttrain-mlogloss:0.03339\n",
      "[492]\ttrain-mlogloss:0.03337\n",
      "[493]\ttrain-mlogloss:0.03334\n",
      "[494]\ttrain-mlogloss:0.03333\n",
      "[495]\ttrain-mlogloss:0.03330\n",
      "[496]\ttrain-mlogloss:0.03329\n",
      "[497]\ttrain-mlogloss:0.03326\n",
      "[498]\ttrain-mlogloss:0.03325\n",
      "[499]\ttrain-mlogloss:0.03323\n",
      "打印精准率、召回率和F1值\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.50      0.50      0.50        12\n",
      "           1       0.78      0.88      0.82        16\n",
      "           2       0.67      0.67      0.67        24\n",
      "           3       0.77      0.77      0.77        30\n",
      "           4       0.80      0.76      0.78        21\n",
      "           5       0.76      0.84      0.80        19\n",
      "           6       0.64      0.50      0.56        18\n",
      "           7       1.00      1.00      1.00        15\n",
      "           8       0.91      0.91      0.91        22\n",
      "           9       0.94      0.94      0.94        17\n",
      "          10       0.88      0.81      0.84        26\n",
      "          11       0.94      0.81      0.87        21\n",
      "          12       0.96      1.00      0.98        22\n",
      "          13       0.87      0.83      0.85        24\n",
      "          14       0.89      1.00      0.94        16\n",
      "          15       0.92      1.00      0.96        12\n",
      "          16       0.91      1.00      0.95        21\n",
      "          17       0.95      1.00      0.97        18\n",
      "          18       1.00      1.00      1.00        23\n",
      "          19       1.00      1.00      1.00        15\n",
      "          20       1.00      1.00      1.00        22\n",
      "          21       1.00      1.00      1.00        27\n",
      "\n",
      "    accuracy                           0.87       441\n",
      "   macro avg       0.87      0.87      0.87       441\n",
      "weighted avg       0.87      0.87      0.87       441\n",
      "\n",
      "Precision: 0.87, Recall: 0.87, F1: 0.87 \n"
     ]
    }
   ],
   "source": [
    "# 建模与预测：50棵树\n",
    "bst=xgb.train(params,dtrain,num_boost_round=num_boost_round,evals=watchlist)\n",
    "y_pred=bst.predict(dtest)\n",
    "\n",
    "def print_precison_recall_f1(y_true, y_pre):\n",
    "    \"\"\"打印精准率、召回率和F1值\n",
    "    average = [None, 'micro', 'macro', 'weighted']\n",
    "    \"\"\"\n",
    "    print(\"打印精准率、召回率和F1值\")\n",
    "    print(metrics.classification_report(y_true, y_pre))\n",
    "    f1 = round(metrics.f1_score(y_true, y_pre, average='macro'), 2)\n",
    "    p = round(metrics.precision_score(y_true, y_pre, average='macro'), 2)\n",
    "    r = round(metrics.recall_score(y_true, y_pre, average='macro'), 2)\n",
    "    print(\"Precision: {}, Recall: {}, F1: {} \".format(p, r, f1))\n",
    "    \n",
    "print_precison_recall_f1(test_y,y_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20e5cf3e",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## 指标展示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "7a79984b",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBUAAAJdCAYAAABtWk88AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAACYjUlEQVR4nOzdeXxU1f3/8deEJGxJWBoWE1BQ1FpotFBRXMBKUcANXECCyCIQW8C1uOBC9Yu4oVQrlQgqUpRdEFSQCApaaS1YsVA3NGBCUCNbgBCyze8PfozEhETCvXM+Q97PPubx4N7APa+egaDHM/cGgsFgEBERERERERGRIxTlOkBEREREREREIpMWFURERERERESkWrSoICIiIiIiIiLVokUFEREREREREakWLSqIiIiIiIiISLVoUUFEREREREREqkWLCiIiIkfo1Vdf5YILLuCGG26o1q8fNmwYGzdu9Liq+p555hnefvvtCr/21FNPsXDhwvAGiYiISMQIBIPBoOsIERGRSHL99ddz1VVXccUVV7hO8cSAAQPo378/3bt3d50iIiIiESbadYCIiEg4zJs3jxdffJGoqCgaNWrEo48+ynHHHcfs2bP5+9//TlRUFImJidx33320bt2au+66i7i4OD7//HO+/fZbTj31VB599FGeeuop/vvf/5Kdnc2OHTv47LPPOPnkk0O7Fu66667Q8SuvvMKsWbOIiYmhdu3aPPjgg7Rp04YLL7yQp556il//+tdHPH79+vXL/P+66667qFOnDl988QXbtm3jwgsvpGHDhrzzzjvk5uYybtw4OnXqRGZmJg8++CB79+4lNzeXX/7yl/zlL39h3rx5rF+/nscee4xatWqxfPlydu7cSVZWFhdccAHbtm3j5JNP5oILLuDaa69l+vTpnHbaadxxxx1ER0czfvx4F2+niIiIGKGPP4iIyDHvs88+Y8KECUydOpXFixdz4YUX8uyzz7J69WqmTp3K9OnTWbRoEZdeeikjRozg4Ca+9evX8/zzz/Pmm2+yZcsWli5dypgxY2jXrh133HEHgwYNOuyYJSUljB8/nqlTpzJ//nz69OnD2rVry/yc6oxfkf/973+89NJLzJgxgxdeeIF69eoxa9Ysrr/+eqZMmQLAnDlz6NWrF3PmzGHZsmVkZ2fz7rvv0r9//9D/n27dugFQUFDAG2+8wejRo0NjnHTSSYwePZo777yTuXPn8tlnn3H//fdX+z0RERGRY4MWFURE5Ji3evVqzjvvPI477jgABg0axIMPPsh7771Hz549ady4MQBXXnkl3333HdnZ2QCcf/75xMbGEhMTwymnnMKuXbt+9pi1atWie/fuXHvttTz44IMkJCRw9dVXl/k5Xo3/u9/9jpiYGJo0aUK9evU4//zzATj++OPZuXMnAKNHj6Zx48ZMmTKFP//5z3z//ffk5+dXeL0OHTpUeL5Pnz60atWKcePG8fTTT1OnTp2fPR8iIiJybNLHH0RE5JhXq1YtAoFA6LigoIAtW7ZQWlpa7ucGg0GKi4sByvxLcyAQoKLbEP30fFFRUejHEyZM4IsvvuCDDz7gueee47XXXuOpp54Kfd2L8QFiY2PLHEdHl//r/bbbbqOkpIQePXpwwQUXsHXr1sNer169ehWeLywsZPPmzcTHx/Ppp5/SqlWrCn+eiIiI1BzaqSAiIse8s846i9WrV/P9998DMGvWLB5//HHOP/983nzzTbZv3w7A/PnzadiwISeccMLPvnajRo1Yv349AN999x0ffvghANu3b6dLly40bNiQQYMGccstt/Df//63zK/1Yvyf6/3332fEiBH07NkTgHXr1lFSUgIcWHQ5uJBRmccee4yTTz6Z559/nnHjxrFlyxbPO0VERCSyaKeCiIgc80499VRGjx7N0KFDAWjSpAnjx4+nWbNmDBo0iIEDB1JaWkrjxo1JT08nKurnr7kPGDCAP/3pT1x88cW0aNGCs88+G4DGjRvzhz/8gUGDBlGnTh1q1arFuHHjyvzac88996jH/7luvfVWRowYQb169YiLi+PMM8/km2++AeDCCy/kySefLLPL4qfeffddMjIyWLx4MQkJCQwcOJDbb7+dGTNmVLgzQkRERGoGPVJSRERERERERKpFH38QERERERERkWrRooKIiIiIiIiIVIsWFURERERERESkWrSoICIiIiIiIiLVokUFEREREREREamWiHgG1CetLnOdUKn2OR+5TqhS87hGrhMq9e2eHa4TRERERETEkeLCLa4TfFP0w9dhGysm8cSwjXWQdiqIiIiIiIiISLVExE4FERERERERkYhUWuK6wFfaqSAiIiIiIiIi1aKdCiIiIiIiIiJ+CZa6LvCVdiqIiIiIiIiISLVop4KIiIiIiIiI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dtllXHTRRUycOPFnXceXO+w1bNiQCy64AID/+7//45FHHmH16tU8/vjjdO9u88kLFnz0r4957i8vMm3Bs5QUl/D9tz8watBo11khg4am0qJlEt0v6Ur3S7qGzvftdYOZG0rm5m5j6LDbmD3rOWJjY/j6q80MGnKz66wyrDdu/3orq59dxODXHiAQCJC15gveum+a66wyrM+h9T6w32i9D9ToBet9YL/Reh/Yb7TeB2r0gvU+sN9ovc80RzdQrMwHH3zA+++/z4IFCwgEAgwdOpTXX3+dCRMm8Pe//53jjjuOtLQ0Vq5cSZcuXSq9ViBY0QdjPPL111+Tl5fHGWecwdq1a9m9e3doseFINIg7yfs4D7Won+g6oUq7iva6TqjUt3t2uE44Jjxw3AWuEyo1duu7rhNERERExKDiwi2uE3yz96HrwzZW/Xum/6yf9+WXX7J3717OOOMMAB588EEaN27Mv//9b1566SUAFi5cyL/+9S8efvjhSq/l67MATzzxxNCPO3To4OdQIiIiIiIiIvYEw3evg7y8PPLyyn98PiEhgYSEhNDxySefHPrxpk2bWLJkCddddx1NmjQJnW/atCnfffddlWP6uqggIiIiIiIiIuHx0ksv8cwzz5Q7P3LkSEaNGlXu/JdffklaWhp33HEHtWrVYtOmTaGvBYPBn/UkQi0qiIiIiIiIiPgljPdUGDhwIL179y53/tBdCgetXbuWm266iTFjxnDJJZfw4YcfkpubG/p6bm4uTZs2rXJMLSqIiIiIiIiIHAN++jGHw9m6dSsjRoxg4sSJdOrUCYDTTz+dzMxMNm/eTIsWLXj99de56qqrqryWFhVERERERERE/FIavnsq/FzPP/88+/fv55FHHgmdu/baa3nkkUcYNWoU+/fvp0uXLj/r6Y1aVBARERERERGpQe69917uvffeCr+2aNGiI7qWFhVERERERERE/BLGeyq4EOU6QEREREREREQiU0TsVNhbWOA6oVKfF2a7ThABYOzWd10nVOqLU9u6TqjSKZ9vcJ0gIiIiIseSoL17KnhJOxVEREREREREpFoiYqeCiIiIiIiISETSPRVERERERERERMrTooKIiIiIiIiIVIs+/iAiIiIiIiLik2CpbtQoIiIiIiIiIlKOdiqIiIiIiIiI+EU3ajx29OzRlY/WZrBh/SpmzUwnPj7OdVI5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hc4/d+OlPPzq+1w9YS4AF7ZrTf/zf+2o8kdW5/Eg631gv9F6n2VBR/c6CJdA0IfnTuTk5FT69aSkpCO6XnSs+9VXEREREZEjtfvV210nVCr+yidcJ4gAUFzo9h58frr0+EvCNtbr37wRtrEO8mWnQlpaGps2baJp06blbuYRCARYvny5H8OKiIiIiIiImOLqqQzh4suiwsyZM0lNTWXs2LF06NDBjyFERERERERExDFfFhXi4uIYN24cc+fO1aKCiIiIiIiI1Fg+3HHAEwMGDGD79u1ERx9YFnjwwQc5/fTTj/g6viwqAKSkpJCSkuLX5UVERERERESkGoLBIJs2beKdd94JLSpUly+PlBQRERERERERKA3j6+f6+uuvARgyZAiXX345M2bMqPb/P992KoiIiIiIiIhI+OTl5ZGXl1fufEJCAgkJCWV+XqdOnbjvvvsoKiri+uuvp3Xr1px77rlHPKYWFURERERERER8Egzj0x9eeuklnnnmmXLnR44cyahRo0LHv/nNb/jNb34TOr766qtZuXKlFhVERERERCyJv/IJ1wmV+uLUtq4TqnTK5xtcJ4hEjIEDB9K7d+9y5w/dpQCwZs0aioqK6NSpE3DgHgvVvbeCFhVEREREREREjgE//ZjD4ezevZunn36aWbNmUVRUxIIFC3jggQeqNaYWFURERERERER8UhrGjz/8XL/73e9Yt24dvXr1orS0lNTU1DIfhzgSgaDVh2YeIjo22XWCiIiIiMgxRx9/ECuKC7e4TvDN71teHLax3s56K2xjHaSdCiIiIiIiIiI+iYD/jn9UolwHiIiIiIiIiEhk0k4FEREREREREZ9YvKeCl7RTQURERERERESqpUYtKvTs0ZWP1mawYf0qZs1MJz4+znVSOdYbrfeBGr1gvQ/sN1rvA/uN1vtAjV6w3gf2G633gf1G631gu7HJuNE0GHh16PiEVXNJnvts6BV3yYUO635keQ4Pst5ovc+qYBj/50KNWVRITGzM1ClP0qfvcNq260xm5mbGPzTGdVYZ1hut94EavWC9D+w3Wu8D+43W+0CNXrDeB/YbrfeB/UbrfWC3MaZ1S46b+hj1u53/47lWLSjZtZst1/wh9NrzxgqHlQdYncNDWW+03ifu+LKoUFxczLx583j99dcpKiriwQcf5LLLLuPuu+9m586dfgxZpW7durBm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7yA/f5+TnopYb7TeB2r0gvU+sN9ovQ/sN1rvAzV6wXof2G+03gf2G633gRq9YL0P7Dda77NMN2qshpiYGMaPH89//vMfPy5fLRkZKzmrY3vatGkNQNrwASxavMxxVVnWG633gRq9YL0P7Dda7wP7jdb7QI1esN4H9hut94H9Rut9oEYvWO8D+43W+8SdQLCiPSweePvtt9m6dStdunTh+OOPD52fPXs2ffv2PaJrRccme9LUo/uFjBt3N7GxMXz91WYGDbmZHTt2enJtr1hvtN4HavSC9T6w32i9D+w3Wu8DNXrBeh/Yb7TeB/YbrfeBGr1gvQ/sN/rZV1y4xZPrWFSnzvFV/ySPFBR8E7axDvJlUWHChAmsX7+ek046iaVLl3LHHXdwxRVXANC7d28WLFhwRNfzalFBRERERERE7NGigjdcLCr4cqPGlStXsmDBAqKjoxkwYABDhgwhNjaWHj16VHhzDxEREREREZFjkatHPYaLL4sKwWCQQCAAQKtWrUhPT2fw4ME0btw4dF5EREREREREIpsvN2rs3r07AwYM4JNPPgHg5JNP5qmnnuKWW27hm2/Cvx1DRERERERExIVgMBi2lwu+7FQYOXIkHTp0oH79+qFzHTp04NVXX+WFF17wY0gRERERERERCTPfnv7gJd2oUURERERE5Nh1LN+oMSaM/z5b5GAeffn4g4iIiIiIiIjYtXjxYnr27MlFF13Eyy+/XO3r+PLxBxERERERERHB5LMfvvvuOyZOnMirr75KbGws1157LWeddRZt2rQ54mtpUUFERERERETkGJCXl0deXl658wkJCSQkJISOP/jgA84++2wa/r/27jw45vuP4/grNhuShmkdQUnLmJJWk4ijhBBBFjnkkIlQCU2NKJE0jHNcg5Jk0iJlOqODaUsrbk3cBCNHQ2iliog4M9ZdJMSen98f/dna7Kbza8bP50tej798dzbZ52Zi35/9zPebffNNAMDgwYOxd+9eJCYm/uvHfCU2FV7n62uIiIiIiIjo9fUy389+/fXXWLlypc3tiYmJmDx5suX49u3baNGiheXYzc3N8umN/9YrsalARERERERERP9szJgxiIiIsLn9+bMUAMBsNsPBwcFyLISwOv43uKlARERERERE9BqoeZlDbVq1aoXi4mLL8Z07d+Dm5lanx+SnPxARERERERHVI717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\n",
      "text/plain": [
       "<Figure size 1440x720 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# tn, fp, fn, tp = confusion_matrix( test_y, y_pred)\n",
    "sns.set()\n",
    "fig = plt.figure(figsize=(20,10))\n",
    "ax=fig.add_subplot(111)\n",
    "C2= confusion_matrix(test_y, y_pred, labels=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])\n",
    "sns.heatmap(C2,annot=True,ax=ax) #画热力图\n",
    "\n",
    "ax.set_title('confusion matrix') #标题\n",
    "ax.set_xlabel('predict') #x轴\n",
    "ax.set_ylabel('true') #y轴\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0da390eb",
   "metadata": {},
   "source": [
    "### 4. 一些其他的代码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "390afab7",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['.Aqua Kana', '.Arabic UI Display', '.Arabic UI Text', '.Keyboard', '.New York', '.New York', '.SF Compact', '.SF Compact', '.SF Compact Rounded', '.SF NS Mono', '.SF NS Mono', '.SF NS Rounded', 'Academy Engraved LET', 'Al Bayan', 'Al Nile', 'Al Tarikh', 'American Typewriter', 'Andale Mono', 'Apple Braille', 'Apple Braille', 'Apple Braille', 'Apple Braille', 'Apple Braille', 'Apple Chancery', 'Apple SD Gothic Neo', 'Apple Symbols', 'AppleGothic', 'AppleMyungjo', 'Arial', 'Arial', 'Arial', 'Arial', 'Arial Black', 'Arial Hebrew', 'Arial Narrow', 'Arial Narrow', 'Arial Narrow', 'Arial Narrow', 'Arial Rounded MT Bold', 'Arial Unicode MS', 'Arial Unicode MS', 'Athelas', 'Avenir', 'Avenir Next', 'Avenir Next Condensed', 'Ayuthaya', 'Baghdad', 'Bangla MN', 'Bangla Sangam MN', 'Baskerville', 'Beirut', 'Big Caslon', 'Bodoni 72', 'Bodoni 72 Oldstyle', 'Bodoni 72 Smallcaps', 'Bodoni Ornaments', 'Bradley Hand', 'Brush Script MT', 'Chalkboard', 'Chalkboard SE', 'Chalkduster', 'Charter', 'Cochin', 'Comic Sans MS', 'Comic Sans MS', 'Copperplate', 'Corsiva Hebrew', 'Courier New', 'Courier New', 'Courier New', 'Courier New', 'DIN Alternate', 'DIN Condensed', 'Damascus', 'DecoType Naskh', 'DejaVu Sans', 'DejaVu Sans', 'DejaVu Sans', 'DejaVu Sans', 'DejaVu Sans Display', 'DejaVu Sans Mono', 'DejaVu Sans Mono', 'DejaVu Sans Mono', 'DejaVu Sans Mono', 'DejaVu Serif', 'DejaVu Serif', 'DejaVu Serif', 'DejaVu Serif', 'DejaVu Serif Display', 'Devanagari MT', 'Devanagari Sangam MN', 'Didot', 'Diwan Kufi', 'Diwan Thuluth', 'Euphemia UCAS', 'Farah', 'Farisi', 'Futura', 'Galvji', 'Geeza Pro', 'Georgia', 'Georgia', 'Georgia', 'Georgia', 'Gill Sans', 'Gujarati MT', 'Gujarati Sangam MN', 'Gurmukhi MN', 'Gurmukhi MT', 'Gurmukhi Sangam MN', 'Heiti TC', 'Heiti TC', 'Helvetica', 'Helvetica Neue', 'Herculanum', 'Hiragino Maru Gothic Pro', 'Hiragino Mincho ProN', 'Hiragino Sans', 'Hiragino Sans', 'Hiragino Sans', 'Hiragino Sans', 'Hiragino Sans', 'Hiragino Sans', 'Hiragino Sans', 'Hiragino Sans', 'Hiragino Sans', 'Hiragino Sans', 'Hiragino Sans GB', 'Hoefler Text', 'Hoefler Text', 'ITF Devanagari', 'Impact', 'InaiMathi', 'Iowan Old Style', 'Kailasa', 'Kannada MN', 'Kannada Sangam MN', 'Kefa', 'Khmer MN', 'Khmer Sangam MN', 'Kohinoor Bangla', 'Kohinoor Devanagari', 'Kohinoor Gujarati', 'Kohinoor Telugu', 'Kokonor', 'Krungthep', 'KufiStandardGK', 'Lao MN', 'Lao Sangam MN', 'Lucida Grande', 'Luminari', 'Malayalam MN', 'Malayalam Sangam MN', 'Marion', 'Marker Felt', 'Menlo', 'Microsoft Sans Serif', 'Mishafi', 'Mishafi Gold', 'Mshtakan', 'Mukta Mahee', 'Muna', 'Myanmar MN', 'Myanmar Sangam MN', 'Nadeem', 'New Peninim MT', 'Noteworthy', 'Noto Nastaliq Urdu', 'Noto Sans Adlam', 'Noto Sans Armenian', 'Noto Sans Avestan', 'Noto Sans Bamum', 'Noto Sans Bassa Vah', 'Noto Sans Batak', 'Noto Sans Bhaiksuki', 'Noto Sans Brahmi', 'Noto Sans Buginese', 'Noto Sans Buhid', 'Noto Sans Carian', 'Noto Sans Caucasian Albanian', 'Noto Sans Chakma', 'Noto Sans Cham', 'Noto Sans Coptic', 'Noto Sans Cuneiform', 'Noto Sans Cypriot', 'Noto Sans Duployan', 'Noto Sans Egyptian Hieroglyphs', 'Noto Sans Elbasan', 'Noto Sans Glagolitic', 'Noto Sans Gothic', 'Noto Sans Hanifi Rohingya', 'Noto Sans Hanunoo', 'Noto Sans Hatran', 'Noto Sans Imperial Aramaic', 'Noto Sans Inscriptional Pahlavi', 'Noto Sans Inscriptional Parthian', 'Noto Sans Javanese', 'Noto Sans Kaithi', 'Noto Sans Kannada', 'Noto Sans Kayah Li', 'Noto Sans Kharoshthi', 'Noto Sans Khojki', 'Noto Sans Khudawadi', 'Noto Sans Lepcha', 'Noto Sans Limbu', 'Noto Sans Linear A', 'Noto Sans Linear B', 'Noto Sans Lisu', 'Noto Sans Lycian', 'Noto Sans Lydian', 'Noto Sans Mahajani', 'Noto Sans Mandaic', 'Noto Sans Manichaean', 'Noto Sans Marchen', 'Noto Sans Meetei Mayek', 'Noto Sans Mende Kikakui', 'Noto Sans Meroitic', 'Noto Sans Miao', 'Noto Sans Modi', 'Noto Sans Mongolian', 'Noto Sans Mro', 'Noto Sans Multani', 'Noto Sans Myanmar', 'Noto Sans NKo', 'Noto Sans Nabataean', 'Noto Sans New Tai Lue', 'Noto Sans Newa', 'Noto Sans Ogham', 'Noto Sans Ol Chiki', 'Noto Sans Old Hungarian', 'Noto Sans Old Italic', 'Noto Sans Old North Arabian', 'Noto Sans Old Permic', 'Noto Sans Old Persian', 'Noto Sans Old South Arabian', 'Noto Sans Old Turkic', 'Noto Sans Oriya', 'Noto Sans Osage', 'Noto Sans Osmanya', 'Noto Sans Pahawh Hmong', 'Noto Sans Palmyrene', 'Noto Sans Pau Cin Hau', 'Noto Sans PhagsPa', 'Noto Sans Phoenician', 'Noto Sans Psalter Pahlavi', 'Noto Sans Rejang', 'Noto Sans Runic', 'Noto Sans Samaritan', 'Noto Sans Saurashtra', 'Noto Sans Sharada', 'Noto Sans Shavian', 'Noto Sans Siddham', 'Noto Sans Sora Sompeng', 'Noto Sans Sundanese', 'Noto Sans Syloti Nagri', 'Noto Sans Syriac', 'Noto Sans Tagalog', 'Noto Sans Tagbanwa', 'Noto Sans Tai Le', 'Noto Sans Tai Tham', 'Noto Sans Tai Viet', 'Noto Sans Takri', 'Noto Sans Thaana', 'Noto Sans Tifinagh', 'Noto Sans Tirhuta', 'Noto Sans Ugaritic', 'Noto Sans Vai', 'Noto Sans Wancho', 'Noto Sans Warang Citi', 'Noto Sans Yi', 'Noto Serif Ahom', 'Noto Serif Balinese', 'Noto Serif Myanmar', 'Optima', 'Oriya MN', 'Oriya Sangam MN', 'PT Mono', 'PT Sans', 'PT Serif', 'PT Serif Caption', 'Palatino', 'Papyrus', 'Party LET', 'Phosphate', 'PingFang HK', 'Plantagenet Cherokee', 'Raanana', 'Rockwell', 'STIXGeneral', 'STIXGeneral', 'STIXGeneral', 'STIXGeneral', 'STIXGeneral', 'STIXGeneral', 'STIXGeneral', 'STIXGeneral', 'STIXIntegralsD', 'STIXIntegralsD', 'STIXIntegralsSm', 'STIXIntegralsSm', 'STIXIntegralsUp', 'STIXIntegralsUp', 'STIXIntegralsUpD', 'STIXIntegralsUpD', 'STIXIntegralsUpSm', 'STIXIntegralsUpSm', 'STIXNonUnicode', 'STIXNonUnicode', 'STIXNonUnicode', 'STIXNonUnicode', 'STIXNonUnicode', 'STIXNonUnicode', 'STIXNonUnicode', 'STIXNonUnicode', 'STIXSizeFiveSym', 'STIXSizeFiveSym', 'STIXSizeFourSym', 'STIXSizeFourSym', 'STIXSizeFourSym', 'STIXSizeFourSym', 'STIXSizeOneSym', 'STIXSizeOneSym', 'STIXSizeOneSym', 'STIXSizeOneSym', 'STIXSizeThreeSym', 'STIXSizeThreeSym', 'STIXSizeThreeSym', 'STIXSizeThreeSym', 'STIXSizeTwoSym', 'STIXSizeTwoSym', 'STIXSizeTwoSym', 'STIXSizeTwoSym', 'STIXVariants', 'STIXVariants', 'Sana', 'Sathu', 'Savoye LET', 'Seravek', 'Shree Devanagari 714', 'SignPainter', 'Silom', 'Sinhala MN', 'Sinhala Sangam MN', 'Skia', 'Snell Roundhand', 'Songti SC', 'Sukhumvit Set', 'Superclarendon', 'Symbol', 'System Font', 'System Font', 'Tahoma', 'Tahoma', 'Tamil MN', 'Tamil Sangam MN', 'Telugu MN', 'Telugu Sangam MN', 'Thonburi', 'Times', 'Times New Roman', 'Times New Roman', 'Times New Roman', 'Times New Roman', 'Trattatello', 'Trebuchet MS', 'Trebuchet MS', 'Trebuchet MS', 'Trebuchet MS', 'Verdana', 'Verdana', 'Verdana', 'Verdana', 'Waseem', 'Webdings', 'Wingdings', 'Wingdings 2', 'Wingdings 3', 'Zapf Dingbats', 'Zapfino', 'cmb10', 'cmex10', 'cmmi10', 'cmr10', 'cmss10', 'cmsy10', 'cmtt10']\n"
     ]
    }
   ],
   "source": [
    "## 更改字体解决中文出现方框问题\n",
    "\n",
    "import matplotlib\n",
    "\n",
    "fonts = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])\n",
    "print(fonts) #查看字体列表\n",
    "\n",
    "plt.rcParams['font.family'] = 'System Font' #更改字体"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "2e9f8ae5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集每个样本的得分\n",
      " [18. 15. 14. 15. 17. 19.  7. 10.  9. 14.  5. 12. 16. 19.  8. 17. 12. 20.\n",
      " 14. 21. 11. 15. 12. 17. 19. 21. 11. 10. 19. 13. 18. 12. 18.  5. 16. 21.\n",
      " 21.  5.  8.  9.  6.  8.  6.  5.  4.  3. 12. 20. 14. 18. 12.  0. 13.  9.\n",
      "  7. 19.  9. 16. 21. 17. 20. 19. 21. 19. 17.  6. 13.  4. 13.  3.  4. 12.\n",
      "  8.  3.  3.  2.  7.  8.  8.  0. 14.  8.  2. 20. 21. 16. 16.  1.  0. 21.\n",
      "  4.  8. 11. 19.  9.  0. 21. 16. 11. 20.  5.  7.  2. 16.  9. 18. 20. 10.\n",
      " 20.  6. 14.  8.  2. 13. 12. 21.  1.  2. 21. 12. 20. 11. 19. 18.  1.  4.\n",
      "  3. 17. 13.  1. 21.  5.  5.  2. 18. 18.  2.  3. 19.  9. 21.  0.  2. 11.\n",
      " 12. 13. 14. 13.  7. 13.  3. 16.  7.  8. 10. 14.  6. 18. 15. 20.  6. 13.\n",
      "  5.  2.  4.  2.  4. 18. 20.  1. 11. 14.  2.  9.  5. 21.  5. 10. 10. 12.\n",
      " 10. 13.  5.  5.  7.  3.  7. 19.  5. 10.  7. 10.  1.  8. 15. 17. 18.  9.\n",
      " 10.  4. 21. 13.  3. 20. 16.  4.  2. 11.  1. 20.  5.  3.  9.  8. 17.  1.\n",
      " 17.  1.  6. 15. 11. 16.  4.  1.  3. 16. 21. 14. 16. 13.  0. 15. 18. 21.\n",
      " 12. 10.  9. 13. 16.  8.  3. 10. 21.  0.  6. 18. 13. 10. 10.  4. 18.  3.\n",
      " 18. 19.  3.  2. 16.  9.  5. 15.  9.  4. 16.  8.  6. 20.  3.  1. 14. 10.\n",
      " 14.  8. 14. 15.  7. 16. 16. 17. 18.  4. 10.  9. 11.  9.  1. 16. 16. 18.\n",
      " 20.  1. 14. 21.  7.  1. 21.  2. 20. 12.  9.  5.  3. 21.  1. 13.  2.  4.\n",
      " 11. 13. 10. 18. 12. 10. 10.  3.  5.  3. 17.  8.  2. 18. 13.  0. 17.  9.\n",
      " 11. 19.  4. 21.  1. 13. 18. 12. 10. 10.  4.  2.  7. 21. 12. 16. 16. 17.\n",
      " 16.  3. 12. 21.  3.  3.  3. 14. 20. 13.  8. 12.  3. 11. 12.  5. 13.  4.\n",
      "  8.  2.  1. 17.  0. 20.  5.  6. 15.  2. 10. 20.  2. 20. 11. 11. 14.  8.\n",
      " 18. 14.  4.  3. 12. 17. 12. 20.  6. 14.  4. 13.  3. 10.  6.  2.  2. 17.\n",
      " 11.  8. 17. 10.  1.  7. 13. 21.  2. 11.  5.  0.  7.  8. 12. 20.  3.  2.\n",
      " 17.  6.  7. 18.  3. 15.  8.  5. 21.  6. 19. 15.  3.  4. 16. 15.  3. 18.\n",
      " 19.  0. 12.  3. 20. 17.  0. 11. 21.]\n",
      "测试集每棵树所属的节点数\n",
      " [[ 3. 15.  3. ...  0.  0.  0.]\n",
      " [ 3. 15.  3. ...  0.  0.  0.]\n",
      " [ 3. 15.  3. ...  0.  0.  0.]\n",
      " ...\n",
      " [10. 12. 34. ...  0.  0.  0.]\n",
      " [ 8. 15.  3. ...  0.  0.  0.]\n",
      " [ 3. 15.  3. ...  0.  0.  0.]]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Font family ['Microsoft YaHei'] not found. Falling back to DejaVu Sans.\n",
      "findfont: Font family ['Microsoft YaHei'] not found. Falling back to DejaVu Sans.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "特征的重要性\n",
      " [[[-2.85199881e+00 -1.79341233e+00 -9.35966551e-01 -1.49672914e+00\n",
      "    1.12090543e-01  1.29792595e+00]\n",
      "  [-1.46463931e-01 -3.93193960e-01 -1.96824729e-01 -2.93052554e+00\n",
      "   -2.20843291e+00  7.84261942e-01]\n",
      "  [-3.01853609e+00  1.95906505e-01 -2.34799266e-01 -2.17076778e+00\n",
      "   -1.12881398e+00  1.07727742e+00]\n",
      "  ...\n",
      "  [ 1.87172174e+00 -7.51379430e-02  1.50447369e-01 -2.10896301e+00\n",
      "   -7.76545882e-01 -6.05358005e-01]\n",
      "  [ 4.73327577e-01 -1.58258152e+00 -1.55918348e+00 -2.53437459e-01\n",
      "   -4.35786575e-01 -1.30202949e-01]\n",
      "  [ 3.55990827e-01 -4.71823961e-01 -2.58087492e+00 -9.11569893e-01\n",
      "    1.36977053e+00 -1.93057001e-01]]\n",
      "\n",
      " [[-2.54239821e+00 -1.70406222e-01 -5.65948963e-01 -1.33976877e+00\n",
      "   -5.82376122e-01  1.29792595e+00]\n",
      "  [-5.57701737e-02  2.51372963e-01 -1.12454236e+00 -2.76363420e+00\n",
      "   -1.90489638e+00  7.84261942e-01]\n",
      "  [-2.78035665e+00 -3.70081142e-02  1.36100113e-01 -2.08491063e+00\n",
      "   -1.34221315e+00  1.07727742e+00]\n",
      "  ...\n",
      "  [-4.19931054e-01 -6.70032680e-01 -1.39790833e+00 -1.07351959e+00\n",
      "   -9.52960908e-01 -6.05358005e-01]\n",
      "  [-5.32342553e-01 -1.60508394e+00 -1.45133960e+00 -1.29560456e-01\n",
      "   -2.66677409e-01 -1.30202949e-01]\n",
      "  [-7.39274248e-02 -7.19612718e-01 -1.95430386e+00 -4.78832543e-01\n",
      "   -1.86170065e+00 -1.93057001e-01]]\n",
      "\n",
      " [[-3.16512632e+00  8.52210701e-01 -8.82834382e-03 -1.70519292e+00\n",
      "   -1.49466440e-01  1.29792595e+00]\n",
      "  [ 8.24193597e-01  3.03329200e-01 -1.19872296e+00 -2.43625331e+00\n",
      "   -2.34071350e+00  7.84261942e-01]\n",
      "  [-2.02116585e+00  5.72291195e-01 -5.65553486e-01 -2.05706835e+00\n",
      "   -1.36851990e+00  1.07727742e+00]\n",
      "  ...\n",
      "  [-1.95593584e+00 -7.81877995e-01 -1.75808620e+00 -2.74954855e-01\n",
      "    5.82070708e-01 -6.05358005e-01]\n",
      "  [-8.46771002e-01 -1.18203056e+00 -1.09325457e+00 -1.61158919e+00\n",
      "   -2.89671361e-01 -1.30202949e-01]\n",
      "  [-5.61724186e-01 -8.34144592e-01 -2.39685488e+00 -3.46363932e-01\n",
      "   -5.85471034e-01 -1.93057001e-01]]\n",
      "\n",
      " ...\n",
      "\n",
      " [[ 3.53753710e+00 -6.03980362e-01 -2.27144271e-01  4.54387546e-01\n",
      "    6.68332204e-02  1.29792595e+00]\n",
      "  [-3.13308692e+00 -3.79723936e-01  1.63357064e-01  1.69845298e-01\n",
      "   -2.09417462e+00  7.84261942e-01]\n",
      "  [ 6.32332265e-01 -3.87828320e-01 -3.98808122e-02 -1.13050759e+00\n",
      "   -1.66913509e+00  1.07727742e+00]\n",
      "  ...\n",
      "  [-2.36569524e+00 -4.53767180e-01 -8.39574516e-01 -3.13113838e-01\n",
      "   -7.79442564e-02 -6.05358005e-01]\n",
      "  [-8.46771002e-01 -1.17572296e+00 -1.09325457e+00 -1.61789691e+00\n",
      "   -2.89671361e-01 -1.30202949e-01]\n",
      "  [-7.28427887e-01 -1.01408947e+00 -2.28301501e+00 -8.52655806e-03\n",
      "   -8.80975008e-01 -1.93057001e-01]]\n",
      "\n",
      " [[-2.02358222e+00 -1.91874695e+00 -2.62697816e-01 -7.99535930e-01\n",
      "   -6.21241808e-01  1.29792595e+00]\n",
      "  [-2.96579301e-01 -2.86227822e-01 -8.96475434e-01 -1.69454408e+00\n",
      "   -1.23678410e+00  7.84261942e-01]\n",
      "  [-2.92764378e+00 -9.29001212e-01 -5.88136688e-02  1.00727901e-01\n",
      "    1.41387177e+00  1.07727742e+00]\n",
      "  ...\n",
      "  [-1.05263889e-01 -3.42422247e-01 -1.84673119e+00  2.13010401e-01\n",
      "   -1.52005410e+00 -6.05358005e-01]\n",
      "  [-4.76270318e-01 -1.22904682e+00 -1.17683959e+00 -1.68182111e+00\n",
      "   -2.97981888e-01 -1.30202949e-01]\n",
      "  [-1.01092100e-01 -7.99942851e-01 -2.00303125e+00 -1.09975226e-04\n",
      "   -2.15427208e+00 -1.93057001e-01]]\n",
      "\n",
      " [[-2.91511321e+00 -1.40401566e+00 -8.19435537e-01 -1.48752725e+00\n",
      "    2.32571781e-01  1.29792595e+00]\n",
      "  [-1.12723604e-01 -2.17985779e-01  1.07360974e-01 -2.80768418e+00\n",
      "   -2.25757217e+00  7.84261942e-01]\n",
      "  [-2.84963179e+00 -8.05999756e-01 -2.76816308e-01 -2.22649503e+00\n",
      "   -1.37044358e+00  1.07727742e+00]\n",
      "  ...\n",
      "  [ 9.32498872e-01  3.53707224e-02 -3.62819821e-01 -1.77364147e+00\n",
      "   -7.79775620e-01 -6.05358005e-01]\n",
      "  [ 8.26266825e-01 -2.37797052e-01  1.49952030e+00  3.44590575e-01\n",
      "   -5.15974760e-01 -1.30202949e-01]\n",
      "  [ 3.17758530e-01  4.30621445e-01  3.63096476e+00 -8.94379795e-01\n",
      "    2.54341793e+00 -1.93057001e-01]]]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 24433 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 21709 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 31958 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 23615 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 30149 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 30340 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 37325 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 35201 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 29305 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 24449 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:203: RuntimeWarning: Glyph 29305 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:203: RuntimeWarning: Glyph 24449 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:203: RuntimeWarning: Glyph 24433 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:203: RuntimeWarning: Glyph 21709 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:203: RuntimeWarning: Glyph 31958 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:203: RuntimeWarning: Glyph 23615 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:203: RuntimeWarning: Glyph 30149 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:203: RuntimeWarning: Glyph 30340 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:203: RuntimeWarning: Glyph 37325 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/a1234/opt/anaconda3/envs/python-ml/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:203: RuntimeWarning: Glyph 35201 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n"
     ]
    },
    {
     "data": {
      "image/png": "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y1SoUInRo0OpWrWavd9x4ybw/vtj6djRC09PT0JCJlGiRAkAdu36nbfeGszatT8BEBAQyPHjx+jdOwgAf/8AAgICc/mbuEkhnkcKFixIREQEEyZMYO7cudhsNtzd3ZkyZcodtytVqhRjx46lX79+lChRAi8vLwoVKmS/gKNPnz707n39Vor58+fnQiUiIrlj4MAhDBw4xD6d/neBgd0JDOye5Xbe3u3w9m6XZRtA2bLlmDFjdpZtDRs2tgc4gMViYcCAIQwYMOQeKsh5FkOXKptOcnKy/Wh96dKlLFmyhEWLFt23/QWHruH0+dT71r+ISHZiwgLswZ1ViOcnuXlOXEfiJjR//nxWr15NRkYGxYsXJzQ0NK+HJCIieUAhbkL9+/enf//+eT0MERHJY7o6XURExKQU4iIiIialEBcRETEphbiIiIhJKcRFRERMSiEuIiJiUgpxERERk9IT20REJN+7mmbl8qXrT47UE9tu0sNeJFtJScnYbA/+73r5/QdDTnpYan1Y6oSHq1a5SdPpIiIiJqUQFxERMSmFuIiIiEkpxEVERExKIS4iImJSusVMRETypb/fVvZ3+f1KfN1iJvlKcOgaTp+/9R+SiMj9FBMWQP6N6vxB0+kiIiImpRAXERExKYW4iIiISSnERURETEohLiIiYlIKcREREZNSiIuIiJiU7hMXEZF869ChBD7+eBL79v2Jm1sJBgwYQteunVmzZhUffTTBvp7NZiMtLY3PPptP7dp1uHbtGlOnTmbjxg1YrVbq12/If/87Ag+P0gDs3r2LadPCOHToEOXKlePNN4fTsGGjLMdgGAaffDKdlSujAfDz60z//oOxWCz3vf7sZBvib7zxBtk91M0wDA4dOsSKFStybGAiIvJws1qtDB8+jC5dniU8fCY7d+7gnXeG0qRJfdq370j79h3t68bGxjBv3mfUqlUbgG+/XcSePbv58stFODu78OGHoYSHf8SECR9x6dJFhg9/k2HDRtCmTVu+/z6Od94ZyjffRFOsWLFbxhEdHcVPP21g3ryFWCwWhg4dSLly5enSpWsufRO3l22Inz59moULF2bbUa9evXJkQCIiIgDx8fEkJZ2he/ceWCwWmjRpRv36DYmOjqZHj+BM665atRIfn072o+MTJ47TvPkTlCzpDoC3dwemT/8YgN27/6BECXe8vJ4GoEMHX774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9OjBkCFD7Mu6dOnCDz/8QKdOnfD09KRJkyaZjrJvaNy4MS1atMDPz49HHnmEatWqcebMGXsfFy5coGfP6/dNGobB888/T+3atQkLCyMxMREHBweKFSvG+++//6++JxGRezFw4BAGDhxyy3Ivr6fx8no6iy2uGzlyTKbPHh6u9unvqlWr2e8nz0rDho3tAQ5gsVgYMGAIAwbcOg4zshhGVhf+53/p6enYbDYKFy5McnIyzz//PCNGjLAfxUvOCQ5dw+nzuhhORO5NTFhAjp5z/nuI50cP/DnxnHDp0iX69u1LRkYGaWlp+Pn5KcBFROShYtoQd3d3JyoqKq+HcYs///yT4cOH37K8Z8+edOvWLQ9GJCIiDyrThnh+VadOHaKjo/N6GCIi8hB4IJ+dLiIi8jBQiIuIiJiUQlxERMSkFOIiIiImpRAXERExKYW4iIiISZn2iW0iImIOV9OsXL6Uc0991BPbbtJ94pKtpKRkbLYH/3e9/P6DISc9LLU+LHXCw1Wr3KTpdBEREZNSiIuIiJiUQlxERMSkFOIiIiImpRAXERExKYW4iIiISSnERURETEohLiIiYlIKcREREZNSiIuIiJiUQlxERMSkFOIiIiImpRAXERExKYW4iIiISSnERURETEohLiIiYlIKcREREZNSiIuIiJhUwbwegOR/BQpY8noIuUa1PngeljpBteYXuTk2i2EYRq7tTURERHKMptNFRERMSiEuIiJiUgpxERERk1KIi4iImJRCXERExKQU4iIiIialEBcRETEphbiIiIhJKcRFRERMSiEuWUpISKB79+506NCB7t27c+jQobwe0j9y/vx5+vbtS4cOHfD39+f111/n3LlzwJ1ru9e2/GDGjBnUqlWLv/76C3gw60xLS2PMmDG0b98ef39/3nvvPeDBrHX9+vV06dKFgIAA/P39WbNmDfBg1Dpp0iS8vLwy/f+a3RgfhLrvC0MkC7169TKWL19uGIZhLF++3OjVq1cej+ifOX/+vLFlyxb754kTJxojRowwDOPOtd1rW17bs2ePERwcbDz11FPGvn37DMN4MOsMCQkx3n//fcNmsxmGYRhnzpwxDOPBq9VmsxlNmza1/13++eefRqNGjYyMjIwHotbt27cbx48fN9q2bWuv0TDuz99jfqr7flCIyy3Onj1rNGnSxLBarYZhGIbVajWaNGliJCUl5fHI7t3q1auNF1988Y613WtbXktLSzOee+454/Dhw/Yfig9incnJyUaTJk2M5OTkTMsfxFptNpvx+OOPG7/++qthGIaxbds2o3379g9crX8P8ftRW36tOyfpLWZyixMnTuDp6YmDgwMADg4OlC5dmhMnTlCyZMk8Ht0/Z7PZWLRoEV5eXneszTCMe2rL6+9k6tSpdO7cmQoVKtiXPYh1HjlyBDc3N2bMmMHWrVtxdnZmyJAhFClS5IGr1WKxMGXKFAYMGICTkxNXrlzh008/fSD/Xm+4H7WZoe5/S+fE5YEXEhKCk5MTPXv2zOuh5Ljff/+d3bt388ILL+T1UO47q9XKkSNHqFu3LlFRUbz11lsMGjSIlJSUvB5ajrNarXz66afMmjWL9evX88knnzB06NAHslb5d3QkLrcoW7Ysp06dIiMjAwcHBzIyMjh9+jRly5bN66H9Y5MmTSIxMZGIiAgKFChwx9oMw7intry0fft24uPj8fb2BuDkyZMEBwczYsSIB6pOgHLlylGwYEH8/PwAaNiwISVKlKBIkSIPXK1//vknp0+fpkmTJgA0adKEokWLUrhw4Qeu1hvux79NM9T9b+lIXG7h7u5OnTp1WLlyJQArV66kTp06ppt+Cg8PZ8+ePcycORNHR0fgzrXda1te6tevHz///DPr1q1j3bp1lClThrlz5+Lr6/tA1QlQsmRJmjdvzi+//AJcv+o4KSmJypUrP3C1lilThpMnTxIfHw/AwYMHOXv2LJUqVXrgar3hfvzbNEPd/5bFMAwjrwch+c/BgwcZPnw4ly5dolixYkyaNImqVavm9bDu2v79+/Hz86Ny5coUKVIEgEceeYSZM2fesbZ7bcsvvLy8iIiIoGbNmg9knUeOHGHkyJFcuHCBggUL8sYbb9CmTZsHstYVK1YwZ84cLBYLAIMHD+bpp59+IGoNDQ1lzZo1nD17lhIlSuDm5sZ33313X2rLT3XfDwpxERERk9J0uoiIiEkpxEVERExKIS4iImJSCnERERGTUoiLiIiYlEJcRETEpPTENhHJFV5eXpw9e9b+HGuA1atX4+npmYejEjE3hbiI5JqIiAhatmyZp2OwWq0ULKgfffJg0HS6iOQr586d49VXX6Vp06Y8/vjjvPDCC9hsNuD6m65ef/11nnjiCZo3b8748eOB62+qmzVrFm3btqVFixa8/fbbXL58GYCjR49Sq1Ytvv32W5566ilefPFFAJYsWULHjh1p1qwZwcHBHDt2LG8KFvkXFOIikq988cUXeHp6snnzZn755RfefPNNLBYLGRkZvPrqq5QrV45169axceNGfH19AYiKimLZsmV89dVXfP/996SkpNgD/obt27cTGxvL3Llz+f777/n000+ZMWMGmzdvpkmTJgwbNiwvyhX5VxTiIpJrBg4cSNOmTWnatCkDBgzIcp2CBQty5swZjh8/TqFChWjatCkWi4U//viD06dP8/bbb+Pk5EThwoVp2rQpADExMbz00ktUqFABZ2dn3nzzTWJjY7FarfZ+Bw0ahJOTE0WKFCEyMpJ+/fpRrVo1ChYsyGuvvcaff/6po3ExHZ0YEpFcM3PmzGzPiQcHBzNjxgz69OkDQPfu3enXrx8nTpywv470f50+fZry5cvbP5cvXx6r1UpSUpJ9WZkyZex/Pn78OBMmTGDSpEn2ZTdeW/n3fkTyO4W4iOQrLi4uDB8+nOHDh7N//3569+5N/fr1KVu2LCdOnMjywrTSpUtnOoo+fvw4BQsWxN3dnZMnTwLY3wYG199d/dprr9G5c+fcKUrkPtF0uojkK+vXrycxMRHDMHBxccHBwYECBQrQoEEDPDw8CAsLIyUlhbS0NH777TcA/Pz8+PLLLzly5AhXrlwhPDycjh073vYq9KCgIGbPns3+/fsBuHz5MqtWrcq1GkVyio7ERSRfSUxMJCQkhHPnzlGsWDGef/55mjdvDly/RS00NJS2bdsC4O/vT5MmTQgMDOTUqVP07NmTtLQ0nnzySd57773b7qNdu3ZcuXKFN998k2PHjuHq6krLli3p2LFjrtQoklP0PnERERGT0nS6iIiISSnERURETEohLiIiYlIKcREREZNSiIuIiJiUQlxERMSkFOIiIiImpRAXERExKYW4iIiISf0/Zah3SKHbdiwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "ypred = bst.predict(dtest)\n",
    "print(\"测试集每个样本的得分\\n\",ypred)\n",
    "ypred_leaf = bst.predict(dtest, pred_leaf=True)\n",
    "print(\"测试集每棵树所属的节点数\\n\",ypred_leaf)\n",
    "\n",
    "ypred_contribs = bst.predict(dtest, pred_contribs=True)\n",
    "\n",
    "print(\"特征的重要性\\n\",ypred_contribs )\n",
    "\n",
    "\n",
    "plt.rcParams['font.family'] = 'Microsoft YaHei' #更改字体\n",
    "xgb.plot_importance(bst,height=0.8,title='影响糖尿病的重要特征', ylabel='特征')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "025ccd26",
   "metadata": {},
   "outputs": [],
   "source": [
    "import joblib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "db7f1cb9",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "\n",
    "joblib.dump(bst, 'xgboost.pkl')\n",
    "#读取\n",
    "model = joblib.load('xgboost.pkl') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "bc0fe9a8",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred=model.predict(dtest)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "8fd0361a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([18., 15., 14., 15., 17., 19.,  7., 10.,  9., 14.,  5., 12., 16.,\n",
       "       19.,  8., 17., 12., 20., 14., 21., 11., 15., 12., 17., 19., 21.,\n",
       "       11., 10., 19., 13., 18., 12., 18.,  5., 16., 21., 21.,  5.,  8.,\n",
       "        9.,  6.,  8.,  6.,  5.,  4.,  3., 12., 20., 14., 18., 12.,  0.,\n",
       "       13.,  9.,  7., 19.,  9., 16., 21., 17., 20., 19., 21., 19., 17.,\n",
       "        6., 13.,  4., 13.,  3.,  4., 12.,  8.,  3.,  3.,  2.,  7.,  8.,\n",
       "        8.,  0., 14.,  8.,  2., 20., 21., 16., 16.,  1.,  0., 21.,  4.,\n",
       "        8., 11., 19.,  9.,  0., 21., 16., 11., 20.,  5.,  7.,  2., 16.,\n",
       "        9., 18., 20., 10., 20.,  6., 14.,  8.,  2., 13., 12., 21.,  1.,\n",
       "        2., 21., 12., 20., 11., 19., 18.,  1.,  4.,  3., 17., 13.,  1.,\n",
       "       21.,  5.,  5.,  2., 18., 18.,  2.,  3., 19.,  9., 21.,  0.,  2.,\n",
       "       11., 12., 13., 14., 13.,  7., 13.,  3., 16.,  7.,  8., 10., 14.,\n",
       "        6., 18., 15., 20.,  6., 13.,  5.,  2.,  4.,  2.,  4., 18., 20.,\n",
       "        1., 11., 14.,  2.,  9.,  5., 21.,  5., 10., 10., 12., 10., 13.,\n",
       "        5.,  5.,  7.,  3.,  7., 19.,  5., 10.,  7., 10.,  1.,  8., 15.,\n",
       "       17., 18.,  9., 10.,  4., 21., 13.,  3., 20., 16.,  4.,  2., 11.,\n",
       "        1., 20.,  5.,  3.,  9.,  8., 17.,  1., 17.,  1.,  6., 15., 11.,\n",
       "       16.,  4.,  1.,  3., 16., 21., 14., 16., 13.,  0., 15., 18., 21.,\n",
       "       12., 10.,  9., 13., 16.,  8.,  3., 10., 21.,  0.,  6., 18., 13.,\n",
       "       10., 10.,  4., 18.,  3., 18., 19.,  3.,  2., 16.,  9.,  5., 15.,\n",
       "        9.,  4., 16.,  8.,  6., 20.,  3.,  1., 14., 10., 14.,  8., 14.,\n",
       "       15.,  7., 16., 16., 17., 18.,  4., 10.,  9., 11.,  9.,  1., 16.,\n",
       "       16., 18., 20.,  1., 14., 21.,  7.,  1., 21.,  2., 20., 12.,  9.,\n",
       "        5.,  3., 21.,  1., 13.,  2.,  4., 11., 13., 10., 18., 12., 10.,\n",
       "       10.,  3.,  5.,  3., 17.,  8.,  2., 18., 13.,  0., 17.,  9., 11.,\n",
       "       19.,  4., 21.,  1., 13., 18., 12., 10., 10.,  4.,  2.,  7., 21.,\n",
       "       12., 16., 16., 17., 16.,  3., 12., 21.,  3.,  3.,  3., 14., 20.,\n",
       "       13.,  8., 12.,  3., 11., 12.,  5., 13.,  4.,  8.,  2.,  1., 17.,\n",
       "        0., 20.,  5.,  6., 15.,  2., 10., 20.,  2., 20., 11., 11., 14.,\n",
       "        8., 18., 14.,  4.,  3., 12., 17., 12., 20.,  6., 14.,  4., 13.,\n",
       "        3., 10.,  6.,  2.,  2., 17., 11.,  8., 17., 10.,  1.,  7., 13.,\n",
       "       21.,  2., 11.,  5.,  0.,  7.,  8., 12., 20.,  3.,  2., 17.,  6.,\n",
       "        7., 18.,  3., 15.,  8.,  5., 21.,  6., 19., 15.,  3.,  4., 16.,\n",
       "       15.,  3., 18., 19.,  0., 12.,  3., 20., 17.,  0., 11., 21.],\n",
       "      dtype=float32)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "6d3d669a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([18., 15., 14., 15., 17., 19.,  7., 10.,  9., 14.,  5., 12., 16.,\n",
       "       19.,  8., 17., 12., 20., 14., 21., 11., 15., 12., 17., 19., 21.,\n",
       "       11., 10., 19., 13., 18., 12., 18.,  5., 16., 21., 21.,  5.,  8.,\n",
       "        9.,  6.,  8.,  6.,  5.,  4.,  3., 12., 20., 14., 18., 12.,  0.,\n",
       "       13.,  9.,  7., 19.,  9., 16., 21., 17., 20., 19., 21., 19., 17.,\n",
       "        6., 13.,  4., 13.,  3.,  4., 12.,  8.,  3.,  3.,  2.,  7.,  8.,\n",
       "        8.,  0., 14.,  8.,  2., 20., 21., 16., 16.,  1.,  0., 21.,  4.,\n",
       "        8., 11., 19.,  9.,  0., 21., 16., 11., 20.,  5.,  7.,  2., 16.,\n",
       "        9., 18., 20., 10., 20.,  6., 14.,  8.,  2., 13., 12., 21.,  1.,\n",
       "        2., 21., 12., 20., 11., 19., 18.,  1.,  4.,  3., 17., 13.,  1.,\n",
       "       21.,  5.,  5.,  2., 18., 18.,  2.,  3., 19.,  9., 21.,  0.,  2.,\n",
       "       11., 12., 13., 14., 13.,  7., 13.,  3., 16.,  7.,  8., 10., 14.,\n",
       "        6., 18., 15., 20.,  6., 13.,  5.,  2.,  4.,  2.,  4., 18., 20.,\n",
       "        1., 11., 14.,  2.,  9.,  5., 21.,  5., 10., 10., 12., 10., 13.,\n",
       "        5.,  5.,  7.,  3.,  7., 19.,  5., 10.,  7., 10.,  1.,  8., 15.,\n",
       "       17., 18.,  9., 10.,  4., 21., 13.,  3., 20., 16.,  4.,  2., 11.,\n",
       "        1., 20.,  5.,  3.,  9.,  8., 17.,  1., 17.,  1.,  6., 15., 11.,\n",
       "       16.,  4.,  1.,  3., 16., 21., 14., 16., 13.,  0., 15., 18., 21.,\n",
       "       12., 10.,  9., 13., 16.,  8.,  3., 10., 21.,  0.,  6., 18., 13.,\n",
       "       10., 10.,  4., 18.,  3., 18., 19.,  3.,  2., 16.,  9.,  5., 15.,\n",
       "        9.,  4., 16.,  8.,  6., 20.,  3.,  1., 14., 10., 14.,  8., 14.,\n",
       "       15.,  7., 16., 16., 17., 18.,  4., 10.,  9., 11.,  9.,  1., 16.,\n",
       "       16., 18., 20.,  1., 14., 21.,  7.,  1., 21.,  2., 20., 12.,  9.,\n",
       "        5.,  3., 21.,  1., 13.,  2.,  4., 11., 13., 10., 18., 12., 10.,\n",
       "       10.,  3.,  5.,  3., 17.,  8.,  2., 18., 13.,  0., 17.,  9., 11.,\n",
       "       19.,  4., 21.,  1., 13., 18., 12., 10., 10.,  4.,  2.,  7., 21.,\n",
       "       12., 16., 16., 17., 16.,  3., 12., 21.,  3.,  3.,  3., 14., 20.,\n",
       "       13.,  8., 12.,  3., 11., 12.,  5., 13.,  4.,  8.,  2.,  1., 17.,\n",
       "        0., 20.,  5.,  6., 15.,  2., 10., 20.,  2., 20., 11., 11., 14.,\n",
       "        8., 18., 14.,  4.,  3., 12., 17., 12., 20.,  6., 14.,  4., 13.,\n",
       "        3., 10.,  6.,  2.,  2., 17., 11.,  8., 17., 10.,  1.,  7., 13.,\n",
       "       21.,  2., 11.,  5.,  0.,  7.,  8., 12., 20.,  3.,  2., 17.,  6.,\n",
       "        7., 18.,  3., 15.,  8.,  5., 21.,  6., 19., 15.,  3.,  4., 16.,\n",
       "       15.,  3., 18., 19.,  0., 12.,  3., 20., 17.,  0., 11., 21.],\n",
       "      dtype=float32)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred2=bst.predict(dtest)\n",
    "y_pred2\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b5d3b4b8",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8cb3b84b",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
